(load 'tablero)
(load 'elimina)


;&OPTIONAL marca que a partir de ahi los params son opcionales y se ponen asi (nom_param1 valor_por_default) (nom_param2 default)
(defun REINAS (N &OPTIONAL (POSREINAS (LIST (CAR (TABLERO N)))) (TAB (ELIMINAFILCOLDIAGONALTODOSLOSPARES (LIST (CAAR POSREINAS)) (TABLERO N))))
	(IF (EQ (LENGTH POSREINAS) N) (MAPCAR 'CAR POSREINAS)
		(IF (< (LENGTH POSREINAS) (CAAAR POSREINAS)) (REINASAUX N (BUSCARLONG2MAS POSREINAS))
			(IF (NULL TAB) (REINASAUX N (BUSCARLONG2MAS POSREINAS))
				(REINAS N (CONS (CAR TAB) POSREINAS) (ELIMINAFILCOLDIAGONALTODOSLOSPARES (LIST (CAAR TAB)) TAB))
			)
		)
	)
)

(defun REINASAUX (N POSREINAS)
	(REINAS N (CONS (CDAR POSREINAS) (CDR POSREINAS)) (ELIMINAFILCOLDIAGONALTODOSLOSPARES (CONS (CADAR POSREINAS) (MAPCAR 'CAR (CDR POSREINAS))) (TABLERO N) ) )
)

(defun ELIMINAFILCOLDIAGONALTODOSLOSPARES (LISTAPARES TAB)
	(IF (NULL LISTAPARES) (ELIMINANULS TAB)
		(ELIMINAFILCOLDIAGONALTODOSLOSPARES (CDR LISTAPARES) (ELIMINAFILCOLDIAG_TAB (CAR LISTAPARES) TAB))
	)
)


